package com.dg.river.module.base

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.dg.river.R
import com.dg.river.core.manager.AppManager
import com.dg.river.core.util.KeyBoardUtils
import com.dg.river.core.util.L
import com.dg.river.module.base.proxy.ProxyClass
import com.dg.river.module.base.view.IBaseView
import com.gyf.immersionbar.ImmersionBar

/**
 * @作者：Hututu
 * @时间：2023/4/25 10:28
 * @描述：内容描述
 * @修改：修改内容
 * @Version:1.0
 */
abstract class BaseActivity : AppCompatActivity(), IBaseView {

    // 上下文对象
    lateinit var mContext: Context

    // 日志打印内容
    lateinit var logContent: StringBuffer

    // 代理类
    private var proxyClass: ProxyClass? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 创建代理类
        proxyClass = createProxyClass()
        proxyClass?.bindPresenter()
        // 定义上下文
        mContext = this
        // 打印日志
        printLog()
        // 管理Activity
        AppManager.getInstance().addActivity(this)
        // 设置状态栏
        ImmersionBar.with(this).statusBarColor(R.color.transparent).statusBarDarkFont(false).init()
        // 设置布局
        setContentView(initLayout())
        // 初始化Intent参数
        initGetIntent()
        // 初始化View
        initView()
        // 初始化数据
        if (viewAndData()) initData()
        // 初始化点击事件
        initListener()
    }

    /**
     * 创建代理类
     *
     * @return
     */
    open fun createProxyClass(): ProxyClass? {
        return proxyClass ?: ProxyClass(this)
    }

    /**
     * 打印进入页面日志
     */
    private fun printLog() {
        logContent = StringBuffer()
        logContent.append(" \n")
        logContent.append(" \n----------进入页面----------------\n")
        logContent.append("| ").append("页面全类名：\n")
        logContent.append("| ").append(this.javaClass.name).append("\n")
    }

    /**
     * 设置布局
     *
     * @return
     */
    abstract fun initLayout(): View

    /**
     * 初始化Intent参数
     */
    protected open fun initGetIntent() {
        val bundle = intent.extras
        if (bundle != null) {
            logContent.append("| ").append("接收参数：\n")
            val keySet = bundle.keySet()
            for (key in keySet) {
                val value = bundle.get(key)
                logContent.append("| ").append(key).append(" = ").append(value).append("\n")
            }
        } else {
            logContent.append("| ").append("接收参数：\n")
            logContent.append("| ").append("无").append("\n")
        }
        logContent.append("----------进入页面----------------\n")
        logContent.append(" \n")
        L.d(logContent.toString())
    }

    /**
     * 初始化View
     *
     * @return
     */
    abstract fun initView()

    /**
     * 是否初始化View接着初始化数据
     *
     * @return
     */
    abstract fun viewAndData(): Boolean

    /**
     * 初始化数据
     *
     * @return
     */
    abstract fun initData()

    /**
     * 初始化监听
     *
     * @return
     */
    abstract fun initListener()

    /**
     * 上下文对象
     */
    override fun getContext(): Context? = this

    /**
     * 跳转页面
     */
    override fun startAty(tClass: Class<out AppCompatActivity?>?) {
        startActivity(Intent(getContext(), tClass))
    }

    /**
     * 跳转页面（传参）
     */
    override fun startAty(tClass: Class<out AppCompatActivity?>?, bundle: Bundle?) {
        bundle?.let {
            startActivity(Intent(getContext(), tClass).putExtras(it))
        }
    }

    /**
     * 页面销毁
     */
    override fun finishAty() {
        KeyBoardUtils.hideSoftKeyBoard(this)
        finish()
    }

    /**
     * 页面销毁
     */
    override fun onDestroy() {
        super.onDestroy()
        AppManager.getInstance().finishActivity(this)
    }
}